package br.unifor.mia.cd.middleware.application.entity;

import arcademis.MarshalException;
import arcademis.Marshalable;
import arcademis.Stream;
import br.unifor.mia.cd.middleware.encrypt.BasicStream;
import br.unifor.mia.cd.middleware.encrypt.GenericStream;
import br.unifor.mia.cd.middleware.encrypt.algorithm.CryptorAlgorithms;
import br.unifor.mia.cd.middleware.encrypt.annotation.Encryptable;
import br.unifor.mia.cd.middleware.util.MarshalableUtil;

@Encryptable(value = CryptorAlgorithms.DUMP)
@br.unifor.mia.cd.middleware.encrypt.marshalable.Marshalable
public class Usuario {

	@Encryptable(CryptorAlgorithms.DUMP)
	private int id;
	
	private String nome;
	
	@Encryptable(CryptorAlgorithms.MD5)
	private String sobrenome;

	public Usuario chefe;

	public static void main(String[] args) {
		Usuario usuario = new Usuario();
		usuario.setId(10);
		usuario.setNome("nome");
		usuario.setSobrenome("sobrenome");
		Usuario chefe = new Usuario();
		usuario.setId(1);
		usuario.setNome("chefenome");
		usuario.setSobrenome("chefesobrenome");
		usuario.setChefe(chefe);
		
		GenericStream stream = new BasicStream();
		try {
			stream.write(usuario);
		} catch (MarshalException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Encryptable anno = usuario.getClass().getAnnotation(Encryptable.class);
		;
		System.out.println(anno.value().getCryptor());
		
	}

	/**
	 * @return the chefe
	 */
	public Usuario getChefe() {
		return chefe;
	}

	/**
	 * @param chefe the chefe to set
	 */
	public void setChefe(Usuario chefe) {
		this.chefe = chefe;
	}

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the sobrenome
	 */
	public String getSobrenome() {
		return sobrenome;
	}

	/**
	 * @param sobrenome the sobrenome to set
	 */
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
}
